﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Xml.Linq;
using System.Threading;
using System.Runtime.Serialization;
using System.Globalization;
namespace WebChatApi.Common
{
    /// <summary>
    /// 
    /// </summary>
    public class FullDateTimeConverter : DateTimeConverterBase
    {
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param><param name="value">The value.</param><param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            DateTime? val = value as DateTime?;
            if (val != null)
            {
                writer.WriteValue(DateTimeUtil.DateTimeToFullString(val.Value));
            }
            else
            {
                throw new Exception("Expected date object value.");
            }
        }

        /// <summary>
        ///   Reads the JSON representation of the object.
        /// </summary>
        /// <param name = "reader">The <see cref = "JsonReader" /> to read from.</param>
        /// <param name = "objectType">Type of the object.</param>
        /// <param name = "existingValue">The existing value of object being read.</param>
        /// <param name = "serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            DateTime datetime;

            return DateTime.TryParseExact(existingValue.GetStringValue(), DateTimeUtil.FullDateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out datetime) ? datetime as DateTime? : null;

        }

    }
}
